import useClipboard from 'vue-clipboard3';
import {ElMessage} from 'element-plus';
import {formatDate} from '/@/utils/formatTime';

export class CommonUtils {
    private static readonly toClipboard = useClipboard().toClipboard;

    // 百分比格式化
    public static percentFormat(row: any, column: number, cellValue: string): string {
        return cellValue ? `${cellValue}%` : '-';
    }

    // 列表日期时间格式化
    public static dateFormatYMD(row: any, column: number, cellValue: string): string {
        if (!cellValue) return '-';
        return formatDate(new Date(cellValue), 'YYYY-mm-dd');
    }

    // 列表日期时间格式化
    public static dateFormatYMDHMS(row: any, column: number, cellValue: string): string {
        if (!cellValue) return '-';
        return formatDate(new Date(cellValue), 'YYYY-mm-dd HH:MM:SS');
    }

    // 列表日期时间格式化
    public static dateFormatHMS(row: any, column: number, cellValue: string | number): string {
        if (!cellValue) return '-';
        const time = typeof cellValue === 'number' ? cellValue : row;
        return formatDate(new Date(time * 1000), 'HH:MM:SS');
    }

    // 小数格式化
    public static scaleFormat(value: string = '0', scale: number = 4): string {
        return Number.parseFloat(value).toFixed(scale);
    }

    // 小数格式化
    public static scale2Format(value: string = '0'): string {
        return Number.parseFloat(value).toFixed(2);
    }

    // 点击复制文本
    public static async copyText(text: string): Promise<string> {
        try {
            // 复制
            await this.toClipboard(text);
            // 下面可以设置复制成功的提示框等操作
            ElMessage.success('复制成功!');
            return text;
        } catch (e) {
            // 复制失败
            ElMessage.error('复制失败!');
            throw e;
        }
    }
}
